#include <iostream>
#include <unistd.h>
#include <signal.h>
#include <cstdlib>
#include <sys/wait.h>

void chld(int sig){
    //  while (true)
    // {
    //     pid_t n = waitpid(-1, nullptr,0); // waitpid默认是阻塞的！
       
    // }

    while (true)
        {
             //这里考虑了可能很多孩子同时退出故写成循环形式来确保都回收了
            pid_t n = waitpid(-1, nullptr, WNOHANG); 
            if (n == 0)
            {
                break;
            }
            else if (n < 0)
            {
                std::cout << "waitpid error " << std::endl;
                break;
            }
            else{ std::cout<<"回收孩子的pid: "<<n<<std::endl;}
        }
}
int main()
{
    // 父进程
    signal(SIGCHLD, SIG_IGN); // 父进程
    for (int i = 0; i < 10; i++)
    {
        pid_t id = fork(); 
        if (id == 0)
        {
            sleep(3);
            
            if(i < 6){
                std::cout << "I am child, exit" << std::endl;
                exit(3);
            }
            else pause();
        }
    }

    while (true)
    {
        std::cout << "I am fater" << std::endl;
        sleep(1);
    }

    return 0;
}